using System.Collections;
using System.Xml;
using Altova.TypeInfo;
using Altova.Xml;
using Altova.Xml.Meta;
using RDML_v1_2_REC.xs;

namespace RDML_v1_2_REC.rdml
{
	public class temperatureType : TypeBase
	{
		internal class Enumerator : EnumeratorBase
		{
			public override object Current
			{
				get
				{
					return new temperatureType((XmlNode)base.InnerCurrent);
				}
			}

			public Enumerator(IEnumerator inner)
				: base(inner)
			{
			}
		}

		public class MemberElement_temperature : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public floatType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public floatType First
			{
				get
				{
					return new floatType(owner.GetElementFirst(info));
				}
			}

			public floatType Last
			{
				get
				{
					return new floatType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_temperature(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public floatType At(int index)
			{
				return new floatType(owner.GetElementAt(info, index));
			}

			public floatType Append()
			{
				return new floatType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new floatType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_duration : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public positiveIntegerType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public positiveIntegerType First
			{
				get
				{
					return new positiveIntegerType(owner.GetElementFirst(info));
				}
			}

			public positiveIntegerType Last
			{
				get
				{
					return new positiveIntegerType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_duration(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public positiveIntegerType At(int index)
			{
				return new positiveIntegerType(owner.GetElementAt(info, index));
			}

			public positiveIntegerType Append()
			{
				return new positiveIntegerType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new positiveIntegerType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_temperatureChange : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public floatType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public floatType First
			{
				get
				{
					return new floatType(owner.GetElementFirst(info));
				}
			}

			public floatType Last
			{
				get
				{
					return new floatType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_temperatureChange(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public floatType At(int index)
			{
				return new floatType(owner.GetElementAt(info, index));
			}

			public floatType Append()
			{
				return new floatType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new floatType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_durationChange : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public intType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public intType First
			{
				get
				{
					return new intType(owner.GetElementFirst(info));
				}
			}

			public intType Last
			{
				get
				{
					return new intType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_durationChange(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public intType At(int index)
			{
				return new intType(owner.GetElementAt(info, index));
			}

			public intType Append()
			{
				return new intType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new intType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_measure : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public measureTypeType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public measureTypeType First
			{
				get
				{
					return new measureTypeType(owner.GetElementFirst(info));
				}
			}

			public measureTypeType Last
			{
				get
				{
					return new measureTypeType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_measure(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public measureTypeType At(int index)
			{
				return new measureTypeType(owner.GetElementAt(info, index));
			}

			public measureTypeType Append()
			{
				return new measureTypeType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new measureTypeType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public class MemberElement_ramp : IEnumerable
		{
			private TypeBase owner;

			private MemberInfo info;

			public floatType this[int i]
			{
				get
				{
					return At(i);
				}
			}

			public floatType First
			{
				get
				{
					return new floatType(owner.GetElementFirst(info));
				}
			}

			public floatType Last
			{
				get
				{
					return new floatType(owner.GetElementLast(info));
				}
			}

			public bool Exists
			{
				get
				{
					return Count > 0;
				}
			}

			public int Count
			{
				get
				{
					return owner.CountElement(info);
				}
			}

			public Element Info
			{
				get
				{
					return new Element(info);
				}
			}

			public MemberElement_ramp(TypeBase owner, MemberInfo info)
			{
				this.owner = owner;
				this.info = info;
			}

			public floatType At(int index)
			{
				return new floatType(owner.GetElementAt(info, index));
			}

			public floatType Append()
			{
				return new floatType(owner.CreateElement(info));
			}

			public void Remove()
			{
				owner.RemoveElement(info);
			}

			public void RemoveAt(int index)
			{
				owner.RemoveElementAt(info, index);
			}

			public IEnumerator GetEnumerator()
			{
				return new floatType.Enumerator(XmlTreeOperations.GetElements(owner.Node, info).GetEnumerator());
			}
		}

		public MemberElement_temperature temperature;

		public MemberElement_duration duration;

		public MemberElement_temperatureChange temperatureChange;

		public MemberElement_durationChange durationChange;

		public MemberElement_measure measure;

		public MemberElement_ramp ramp;

		public static ComplexType StaticInfo
		{
			get
			{
				return new ComplexType(RDML_v1_2_REC_TypeInfo.binder.Types[RDML_v1_2_REC_TypeInfo._altova_ti_rdml_altova_temperatureType]);
			}
		}

		public temperatureType(XmlNode init)
			: base(init)
		{
			instantiateMembers();
		}

		private void instantiateMembers()
		{
			temperature = new MemberElement_temperature(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_temperatureType_altova_temperature]);
			duration = new MemberElement_duration(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_temperatureType_altova_duration]);
			temperatureChange = new MemberElement_temperatureChange(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_temperatureType_altova_temperatureChange]);
			durationChange = new MemberElement_durationChange(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_temperatureType_altova_durationChange]);
			measure = new MemberElement_measure(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_temperatureType_altova_measure]);
			ramp = new MemberElement_ramp(this, RDML_v1_2_REC_TypeInfo.binder.Members[RDML_v1_2_REC_TypeInfo._altova_mi_rdml_altova_temperatureType_altova_ramp]);
		}

		public void SetXsiType()
		{
			XmlTreeOperations.SetAttribute(base.Node, "xsi:type", "http://www.w3.org/2001/XMLSchema-instance", new XmlQualifiedName("temperatureType", "http://www.rdml.org"));
		}
	}
}
